package edu.ues21.tcs.ecommerce2011.mvc.dao;

import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.transaction.annotation.Transactional;
import edu.ues21.tcs.ecommerce2011.mvc.model.ListaPrecio;
/**
*
* @author eandre fmantaras
*/
@Transactional
public class ListaPrecioDAOImpl implements ListaPrecioDAO{

	// Declaro el hibernate template.
	private HibernateTemplate hibernateTemplate;

	// Le seteo el sessionFactory que le inyecto al hibernateTemplate.
	public void setSessionFactory(SessionFactory sessionFactory) {
		this.hibernateTemplate = new HibernateTemplate(sessionFactory);
	}

	public void save(ListaPrecio listaprecio) {

		hibernateTemplate.merge(listaprecio);
	}

	public void delete(Integer idListaPrecio) {

		ListaPrecio listaprecio = (ListaPrecio) hibernateTemplate.load(ListaPrecio.class,idListaPrecio);
		
		hibernateTemplate.delete(listaprecio);
	}

	@SuppressWarnings("unchecked")
	@Transactional(readOnly = true)
	public List<ListaPrecio> getAll() {

		return hibernateTemplate.find("from ListaPrecio");
	}

	@Transactional(readOnly = true)
	public ListaPrecio getListaPrecio(Integer idListaPrecio) {

		return hibernateTemplate.get(ListaPrecio.class, idListaPrecio);
	}

	@Override
	public ListaPrecio getListaPrecioHoy() {
		List<ListaPrecio> listaprecios = new ArrayList<ListaPrecio>();

		long lnMilisegundos = new java.util.Date().getTime();//fecha actual
		Date hoy = new Date(lnMilisegundos);
		listaprecios = getAll();
		for(ListaPrecio lp:listaprecios){
			if (hoy.compareTo(lp.getFechaDesde()) > 0){
				if (hoy.compareTo(lp.getFechaHasta()) < 0){
					return lp;
				}
			   }
		}
		return null;
	
	}

	@Override
	public ListaPrecio getListaPrecio(Date fecha) {
		List<ListaPrecio> listaprecios = new ArrayList<ListaPrecio>();

		listaprecios = getAll();
		for(ListaPrecio lp:listaprecios){
			if (fecha.compareTo(lp.getFechaDesde()) > 0){
				if (fecha.compareTo(lp.getFechaHasta()) < 0){
					return lp;
				}
			   }
		}
		return null;
	}


}
